home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / language / asxsrc.arc / ASLEX.C < prev    next >
C/C++ Source or Header  |  1991-06-10  |  2KB  |  159 lines

  1. /* aslex.c */
  2.  
  3. /*
  4.  * (C) Copyright 1989
  5.  * All Rights Reserved
  6.  *
  7.  * Alan R. Baldwin
  8.  * 721 Berkeley St.
  9.  * Kent, Ohio  44240
  10.  */
  11.  
  12. #include <stdio.h>
  13. #include <setjmp.h>
  14. #include "asm.h"
  15.  
  16. VOID
  17. getid(id, c)
  18. register c;
  19. char *id;
  20. {
  21.     register char *p;
  22.  
  23.     if (c < 0) {
  24.         c = getnb();
  25.         if (ctype[c] != LETTER)
  26.             qerr();
  27.     }
  28.     p = id;
  29.     do {
  30.         if (p < &id[NCPS])
  31.             *p++ = c;
  32.     } while (ctype[c=get()] == LETTER || ctype[c] == DIGIT);
  33.     unget(c);
  34.     while (p < &id[NCPS])
  35.         *p++ = 0;
  36. }
  37.  
  38. char
  39. getnb()
  40. {
  41.     register char c;
  42.  
  43.     while ((c=get()) == ' ' || c == '\t')
  44.         ;
  45.     return (c);
  46. }
  47.  
  48. char
  49. get()
  50. {
  51.     register char c;
  52.  
  53.     if (c = *ip)
  54.         ++ip;
  55.     return (c);
  56. }
  57.  
  58. VOID
  59. unget(c)
  60. {
  61.     if (c)
  62.         --ip;
  63. }
  64.  
  65. char
  66. getmap(d)
  67. {
  68.     register char c, n, v;
  69.  
  70.     if ((c=get()) == '\0')
  71.         qerr();
  72.     if (c == d)
  73.         return (-1);
  74.     if (c == '\\') {
  75.         c = get();
  76.         switch (c) {
  77.  
  78.         case 'b':
  79.             c = '\b';
  80.             break;
  81.  
  82.         case 'f':
  83.             c = '\f';
  84.             break;
  85.  
  86.         case 'n':
  87.             c = '\n';
  88.             break;
  89.  
  90.         case 'r':
  91.             c = '\r';
  92.             break;
  93.  
  94.         case 't':
  95.             c = '\t';
  96.             break;
  97.  
  98.         case '0':
  99.         case '1':
  100.         case '2':
  101.         case '3':
  102.         case '4':
  103.         case '5':
  104.         case '6':
  105.         case '7':
  106.             n = 0;
  107.             v = 0;
  108.             while (++n<=3 && c>='0' && c<='7') {
  109.                 v = (v<<3) + c - '0';
  110.                 c = get();
  111.             }
  112.             unget(c);
  113.             c = v;
  114.             break;
  115.         }
  116.     }
  117.     return (c);
  118. }
  119.  
  120. int
  121. getline()
  122. {
  123. loop:    if (incfil >= 0) {
  124.         if (fgets(ib, sizeof ib, ifp[incfil]) == NULL) {
  125.             fclose(ifp[incfil--]);
  126.             lop = NLPP;
  127.             goto loop;
  128.         }
  129.         ib[strlen(ib) - 1] = 0;
  130.         return(1);
  131.     }
  132.     if (fgets(ib, sizeof ib, sfp[cfile]) == NULL) {
  133.         if (++cfile <= inpfil)
  134.             goto loop;
  135.         return (0);
  136.     }
  137.     ib[strlen(ib) - 1] = 0;
  138.     return (1);
  139. }
  140.  
  141. int
  142. more()
  143. {
  144.     register c;
  145.  
  146.     c = getnb();
  147.     unget(c);
  148.     return( (c == '\0' || c == ';') ? 0 : 1 );
  149. }
  150.  
  151. char
  152. endline()
  153. {
  154.     register char c;
  155.  
  156.     c = getnb();
  157.     return( (c == '\0' || c == ';') ? 0 : c );
  158. }
  159.